home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_480 / tpledit / src / save.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  3KB  |  180 lines

  1.  
  2. /*
  3.  *  SAVE.C
  4.  */
  5.  
  6. #include "defs.h"
  7.  
  8. Prototype void SaveProject(char *);
  9. Prototype void SaveRegion(FILE *, TplRegion *);
  10. Prototype void SaveName(FILE *, char *);
  11. Prototype void SaveLong(FILE *, uword, long);
  12. Prototype void SaveLongNZ(FILE *, uword, long);
  13. Prototype void SaveBox(FILE *, uword, Box *);
  14. Prototype void SavePush(FILE *, uword);
  15. Prototype void SavePop(FILE *);
  16.  
  17. void
  18. SaveProject(name)
  19. char *name;
  20. {
  21.     FILE *fo;
  22.     TplRegion *rg;
  23.  
  24.     fo = fopen(name, "w");
  25.     SavePush(fo, PT_PROJECT);
  26.  
  27.     SavePush(fo, PT_HEADER);
  28.     fwrite(&Ph, sizeof(Ph), 1, fo);
  29.     SavePop(fo);
  30.  
  31.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  32.     SaveRegion(fo, rg);
  33.     }
  34.  
  35.     SavePop(fo);
  36.     fclose(fo);
  37. }
  38.  
  39. void
  40. SaveRegion(fo, rg)
  41. FILE *fo;
  42. TplRegion *rg;
  43. {
  44.     SavePush(fo, PT_REGION);
  45.  
  46.     SaveName(fo, rg->rg_Node.ln_Name);
  47.     SaveBox(fo, PT_BOX,     &rg->rg_Box);
  48.     SaveBox(fo, PT_MINMAX,  &rg->rg_MinMax);
  49.     SaveLongNZ(fo, PT_MAXBUFLEN, rg->rg_MaxBufLen);
  50.     SaveLongNZ(fo, PT_ID, rg->rg_Id);
  51.     SaveLongNZ(fo, PT_REGLL,  RegionToId(rg->rg_LinkLeft));
  52.     SaveLongNZ(fo, PT_REGLR,  RegionToId(rg->rg_LinkRight));
  53.     SaveLongNZ(fo, PT_REGLU,  RegionToId(rg->rg_LinkUp));
  54.     SaveLongNZ(fo, PT_REGLD,  RegionToId(rg->rg_LinkDown));
  55.     SaveLongNZ(fo, PT_LOCKTO, RegionToId(rg->rg_LockedTo));
  56.     SaveLongNZ(fo, PT_FLAGS,  rg->rg_Flags);
  57.     SaveLong(fo, PT_TYPE,   rg->rg_Type);
  58.     SaveLongNZ(fo, PT_EXCLID, rg->rg_ExclGroup);
  59.  
  60.     if (rg->rg_DataBase) {
  61.     SavePush(fo, PT_DATABASE);
  62.     SaveName(fo, rg->rg_DataBase);
  63.     SavePop(fo);
  64.     }
  65.     if (rg->rg_ListRef) {
  66.     SavePush(fo, PT_LISTREF);
  67.     SaveName(fo, rg->rg_ListRef);
  68.     SavePop(fo);
  69.     }
  70.     if (GetHead(&rg->rg_ListSet)) {
  71.     MaxNode *node;
  72.  
  73.     SavePush(fo, PT_LISTSET);
  74.     for (node = GetHead(&rg->rg_ListSet); node; node = GetSucc(node))
  75.         SaveName(fo, node->ln_Name);
  76.     SavePop(fo);
  77.     }
  78.     if (rg->rg_DefText) {
  79.     SavePush(fo, PT_DEFTEXT);
  80.     SaveName(fo, rg->rg_DefText);
  81.     SavePop(fo);
  82.     }
  83.     if (rg->rg_LabText) {
  84.     SavePush(fo, PT_LABTEXT);
  85.     SaveName(fo, rg->rg_LabText);
  86.     SavePop(fo);
  87.     }
  88.     if (rg->rg_TextAttr.ta_Name) {
  89.     SavePush(fo, PT_TEXTATTR);
  90.     SaveName(fo, rg->rg_TextAttr.ta_Name);
  91.     SaveLong(fo, PT_YSIZE, rg->rg_TextAttr.ta_YSize);
  92.     SavePop(fo);
  93.     }
  94.     SavePop(fo);
  95. }
  96.  
  97. void
  98. SaveName(fo, name)
  99. FILE *fo;
  100. char *name;
  101. {
  102.     SavePush(fo, PT_NAME);
  103.     fwrite(name, strlen(name) + 1, 1, fo);
  104.     SavePop(fo);
  105. }
  106.  
  107. void
  108. SaveLong(fo, pt, val)
  109. FILE *fo;
  110. uword pt;
  111. long val;
  112. {
  113.     SavePush(fo, pt);
  114.     fwrite(&val, 4, 1, fo);
  115.     SavePop(fo);
  116. }
  117.  
  118. void
  119. SaveLongNZ(fo, pt, val)
  120. FILE *fo;
  121. uword pt;
  122. long val;
  123. {
  124.     if (val) {
  125.     SavePush(fo, pt);
  126.     fwrite(&val, 4, 1, fo);
  127.     SavePop(fo);
  128.     }
  129. }
  130.  
  131.  
  132. void
  133. SaveBox(fo, pt, box)
  134. FILE *fo;
  135. uword pt;
  136. Box *box;
  137. {
  138.     SavePush(fo, pt);
  139.     fwrite(box, sizeof(Box), 1, fo);
  140.     SavePop(fo);
  141. }
  142.  
  143. void
  144. SavePush(fo, pt)
  145. FILE *fo;
  146. uword pt;
  147. {
  148.     PPNode *pp = malloc(sizeof(PPNode));
  149.     long z = 0;
  150.  
  151.     pp->pp_Pos = ftell(fo);
  152.     AddTail(&PPList, (MaxNode *)pp);
  153.     fwrite(&pt, sizeof(pt), 1, fo);
  154.     fwrite(&z, 4, 1, fo);
  155. }
  156.  
  157. void
  158. SavePop(fo)
  159. FILE *fo;
  160. {
  161.     PPNode *pp;
  162.     long len;
  163.  
  164.     if (ftell(fo) & 1)
  165.     putc(0, fo);
  166.     if (pp = RemTail(&PPList)) {
  167.     len = ftell(fo) - (pp->pp_Pos + sizeof(ProjEntry));
  168.     fseek(fo, pp->pp_Pos + 2, 0);
  169.     fwrite(&len, 4, 1, fo);
  170.     fseek(fo, 0L, 2);
  171.     } else {
  172.     puts("Bad pop");
  173.     }
  174. }
  175.  
  176.  
  177.  
  178.  
  179.  
  180.